package com.sybil.ot.servicio;

import com.sybil.ot.dao.AccionDAO;
import com.sybil.ot.dao.CausaParoDAO;
import com.sybil.ot.dao.ClaseDAO;
import com.sybil.ot.dao.DefectoDAO;
import com.sybil.ot.dao.ResponsableZonaDAO;
import com.sybil.ot.dao.TareaDAO;
import com.sybil.ot.dao.TipoTrabajoDAO;
import com.sybil.ot.dominio.Accion;
import com.sybil.ot.dominio.CausaParo;
import com.sybil.ot.dominio.Clase;
import com.sybil.ot.dominio.Defecto;
import com.sybil.ot.dominio.ResponsableZona;
import com.sybil.ot.dominio.Tarea;
import com.sybil.ot.dominio.TipoTrabajo;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

@Service("catalogoService")
@Transactional(readOnly = true)
public class CatalogoService {

   @Autowired
   private ClaseDAO claseDAO;
   @Autowired
   private TipoTrabajoDAO tipoTrabajoDAO;
   @Autowired
   private TareaDAO tareaDAO;
   @Autowired
   private DefectoDAO defectoDAO;
   @Autowired
   private CausaParoDAO causaParoDAO;
   @Autowired
   private AccionDAO accionDAO;
   @Autowired
   private ResponsableZonaDAO responsableZonaDAO;

   public void guardar(Clase clase) {
      clase.setActivo("S");
      claseDAO.guardarClase(clase);
   }

   public void guardar(TipoTrabajo tipoTrabajo) {
      tipoTrabajo.setActivo("S");
      tipoTrabajoDAO.guardarTipoTrabajo(tipoTrabajo);
   }

   public void guardar(Tarea tarea) {
      tarea.setActivo("S");
      tareaDAO.guardarTarea(tarea);
   }

   public void guardar(Defecto defecto) {
      defecto.setActivo("S");
      defectoDAO.guardarDefecto(defecto);
   }

   public void guardar(CausaParo causaParo) {
      causaParo.setActivo("S");
      if (causaParo.getTipo().equals("")) {
         causaParo.setTipo("D");
      }
      causaParoDAO.guardarCausa(causaParo);
   }

   public void guardar(Accion accion) {
      accion.setActivo("S");
      accionDAO.guardarAccion(accion);
   }

   public void guardar(ResponsableZona responsableZona) {
      if (responsableZona.getPlantas() == null) {
         responsableZona.setPlantas("N");
      }
      if (responsableZona.getVehiculos() == null) {
         responsableZona.setVehiculos("N");
      }
      if (responsableZona.getBombas() == null) {
         responsableZona.setBombas("N");
      }
      responsableZonaDAO.guardarResponsableZona(responsableZona);
   }

//   @Transactional(readOnly = false)
   public void editar(Clase clase) {
      claseDAO.editarClase(clase);
   }

   public void editar(TipoTrabajo tipoTrabajo) {
      tipoTrabajoDAO.editarTipoTrabajo(tipoTrabajo);
   }

   public void editar(Tarea tarea) {
      tareaDAO.editarTarea(tarea);
   }

   public void editar(Defecto defecto) {
      defectoDAO.editarDefecto(defecto);
   }

   public void editar(CausaParo causaParo) {
      causaParoDAO.editarCausa(causaParo);
   }

   public void editar(Accion accion) {
      accionDAO.editarAccion(accion);
   }

   public void editar(ResponsableZona responsableZona) {
      responsableZonaDAO.editarResponsableZona(responsableZona);
   }

   @Transactional(readOnly = false)
   public void eliminarClase(String clave) {
      Clase clase = claseDAO.obtenerClase(clave);
      claseDAO.eliminarClase(clase);
   }

   @Transactional(readOnly = false)
   public void eliminarTipoTrabajo(String clave) {
      TipoTrabajo tipoTrabajo = tipoTrabajoDAO.obtenerTipoTrabajo(clave);
      tipoTrabajoDAO.eliminarTipoTrabajo(tipoTrabajo);
   }

   @Transactional(readOnly = false)
   public void eliminarTarea(String tipoTrabajo, String clave) {
      Tarea tarea = tareaDAO.obtenerTarea(tipoTrabajo, clave);
      tareaDAO.eliminarTarea(tarea);
   }

   @Transactional(readOnly = false)
   public void eliminarDefecto(String clave) {
      Defecto defecto = defectoDAO.obtenerDefecto(clave);
      defectoDAO.eliminarDefecto(defecto);
   }

   @Transactional(readOnly = false)
   public void eliminarCausa(String clave) {
      CausaParo causaParo = causaParoDAO.obtenerCausa(clave);
      causaParoDAO.eliminarCausa(causaParo);
   }

   @Transactional(readOnly = false)
   public void eliminarAccion(String clave) {
      Accion accion = accionDAO.obtenerAccion(clave);
      accionDAO.eliminarAccion(accion);
   }

   @Transactional(readOnly = false)
   public void eliminarResponsableZona(String codigoEmpleado, String claveZona) {
      ResponsableZona responsableZona = responsableZonaDAO.obtenerResponsableZona(codigoEmpleado, claveZona);
      responsableZonaDAO.eliminarResponsableZona(responsableZona);
   }

   @Transactional(readOnly = false)
   public void inactivarClase(String clave, String usuario) {
      Clase clase = claseDAO.obtenerClase(clave);
      clase.setActivo("N");
      clase.setUsuarioModif(usuario);
//      List<TipoTrabajo> tiposTrabajo = clase.getTiposTrabajo();
//      if (tiposTrabajo.isEmpty()) {
//         clase.setTiposTrabajo(null);
//      }
      claseDAO.editarClase(clase);
   }

   @Transactional(readOnly = false)
   public void inactivarTipoTrabajo(String clave, String usuario) {
      TipoTrabajo tipoTrabajo = tipoTrabajoDAO.obtenerTipoTrabajo(clave);
      tipoTrabajo.setActivo("N");
      tipoTrabajo.setUsuarioModif(usuario);
      List<Tarea> tareas = tipoTrabajo.getTareas();
      if (tareas.isEmpty()) {
         tipoTrabajo.setTareas(null);
      }
      tipoTrabajoDAO.editarTipoTrabajo(tipoTrabajo);
   }

   @Transactional(readOnly = false)
   public void inactivarTarea(String tipoTrabajo, String clave, String usuario) {
      Tarea tarea = tareaDAO.obtenerTarea(tipoTrabajo, clave);
      tarea.setActivo("N");
      tarea.setUsuarioModif(usuario);
      tareaDAO.editarTarea(tarea);
   }

   @Transactional(readOnly = false)
   public void inactivarDefecto(String clave, String usuario) {
      Defecto defecto = defectoDAO.obtenerDefecto(clave);
      defecto.setActivo("N");
      defecto.setUsuarioModif(usuario);
      defectoDAO.editarDefecto(defecto);
   }

   @Transactional(readOnly = false)
   public void inactivarCausa(String clave, String usuario) {
      CausaParo causaParo = causaParoDAO.obtenerCausa(clave);
      causaParo.setActivo("N");
      causaParo.setUsuarioModif(usuario);
      causaParoDAO.editarCausa(causaParo);
   }

   @Transactional(readOnly = false)
   public void inactivarAccion(String clave, String usuario) {
      Accion accion = accionDAO.obtenerAccion(clave);
      accion.setActivo("N");
      accion.setUsuarioModif(usuario);
      accionDAO.editarAccion(accion);
   }

   public List<Clase> obtenerClases() {
      return claseDAO.obtenerClases(false);
   }

   public List<Clase> obtenerClasesActivas() {
      return claseDAO.obtenerClases(true);
   }

   public Clase obtenerClase(String clave) {
      return claseDAO.obtenerClase(clave);
   }

   public List<TipoTrabajo> obtenerTiposTrabajo() {
      return tipoTrabajoDAO.obtenerTiposTrabajo(false);
   }

   public List<TipoTrabajo> obtenerTiposTrabajoActivos() {
      return tipoTrabajoDAO.obtenerTiposTrabajo(true);
   }

   public List<TipoTrabajo> obtenerTiposTrabajo(String claveClase) {
      return tipoTrabajoDAO.obtenerPorClase(claveClase);
   }

   public TipoTrabajo obtenerTipoTrabajo(String clave) {
      return tipoTrabajoDAO.obtenerTipoTrabajo(clave);
   }

   public List<Tarea> obtenerTareas() {
      return tareaDAO.obtenerTareas(false);
   }

   public List<Tarea> obtenerTareasActivas() {
      return tareaDAO.obtenerTareas(true);
   }

   public List<Tarea> obtenerTareas(String claveTipoTrabajo) {
      return tareaDAO.obtenerPorTipoTrabajo(claveTipoTrabajo);
   }

   public Tarea obtenerTarea(String tipoTrabajo, String claveTarea) {
      return tareaDAO.obtenerTarea(tipoTrabajo, claveTarea);
   }

   public List<Defecto> obtenerDefectos() {
      return defectoDAO.obtenerDefectos(false);
   }

   public List<Defecto> obtenerDefectosActivos() {
      return defectoDAO.obtenerDefectos(true);
   }

   public Defecto obtenerDefecto(String clave) {
      return defectoDAO.obtenerDefecto(clave);
   }

   public List<CausaParo> obtenerCausas() {
      return causaParoDAO.obtenerCausas();
   }

   public List<CausaParo> obtenerCausasParo() {
      return causaParoDAO.obtenerCausasParo();
   }

   public List<CausaParo> obtenerCausasDefecto() {
      return causaParoDAO.obtenerCausasDefecto();
   }
   public CausaParo obtenerCausa(String clave) {
      return causaParoDAO.obtenerCausa(clave);
   }

   public List<Accion> obtenerAcciones() {
      return accionDAO.obtenerAcciones(false);
   }

   public List<Accion> obtenerAccionesActivas() {
      return accionDAO.obtenerAcciones(true);
   }

   public Accion obtenerAccion(String clave) {
      return accionDAO.obtenerAccion(clave);
   }

   public List<ResponsableZona> obtenerResponsablesZona() {
      return responsableZonaDAO.obtenerResponsasbleZona();
   }

   public List<ResponsableZona> obtenerResponsablesZona(String claveZona) {
      return responsableZonaDAO.obtenerPorZona(claveZona);
   }

   public ResponsableZona obtenerResponsablesZona(String codigoEmpleado, String claveZona) {
      return responsableZonaDAO.obtenerResponsableZona(codigoEmpleado, claveZona);
   }
}
